import request from '../request'
import type { IApiResponse } from '@/types/api'

// 查询参数类型
interface StudentQueryParams {
  userCode?: string      // 学号
  realName?: string      // 姓名
  departmentIds: string  // 部门ID数组字符串
  page?: number
  size?: number
}

// 学生信息类型
interface StudentVO {
  id: number
  username: string
  realName: string
  phone?: string
  email?: string
  avatar?: string
  userType: number
  userTypeDesc: string
  status: boolean
  createTime: string
  updateTime: string
  departmentId: number
  departmentName: string
}

// 分页结果类型
interface PageResult {
  content: StudentVO[]
  totalElements: number
  size: number
  number: number
}

// 创建学生参数类型
interface CreateStudentDTO {
  userCode: string      // 学号
  realName: string      // 姓名
  phone?: string        // 手机号
  email?: string        // 邮箱
  departmentId: number  // 班级ID
}

// 更新学生参数类型
interface UpdateStudentDTO {
  userCode: string      // 学号
  realName: string      // 姓名
  phone?: string        // 手机号
  email?: string        // 邮箱
  departmentId: number  // 班级ID
}

export const studentApi = {
  // 分页查询学生列表
  getStudentPage: (params: StudentQueryParams) => {
    return request<IApiResponse<PageResult>>({
      url: '/v1/students/page',
      method: 'get',
      params
    })
  },

  // 创建学生
  create: (data: CreateStudentDTO) => {
    return request({
      url: '/v1/students',
      method: 'post',
      data
    })
  },

  // 获取学生详情
  getById: (id: number) => {
    return request<StudentVO>({
      url: `/v1/students/${id}`,
      method: 'get'
    })
  },

  // 更新学生
  update: (id: number, data: UpdateStudentDTO) => {
    return request({
      url: `/v1/students/${id}`,
      method: 'put',
      data
    })
  },

  // 删除学生
  delete: (id: number) => {
    return request({
      url: `/v1/students/${id}`,
      method: 'delete'
    })
  },

  // 更新学生状态
  updateStatus: (id: number, status: boolean) => {
    return request({
      url: `/v1/students/${id}/status`,
      method: 'put',
      params: { status }
    })
  },

  // 重置学生密码
  resetPassword: (id: number) => {
    return request({
      url: `/v1/students/${id}/password/reset`,
      method: 'put'
    })
  }
} 